/**
* @file ring_streams.h
* @brief 环形字节流
*/
#ifndef WH_COMMON_RING_STREAMS_H_
#define WH_COMMON_RING_STREAMS_H_

#include "common_define.h"

namespace common
{

	/**
	* @brief 提供一个环形的字节流
	*/
	class CRingStreams
	{
	public:

		/**
		* @brief CRingStreams 构造函数
		*/
		CRingStreams();

		/**
		* @brief ~CRingStreams 析构函数
		*/
		~CRingStreams();


		/**
		* @brief 初始化
		*
		* @param capacity 容量
		*
		* @return 0 成功
		*/
		int32_t Initialize(uint32_t capacity);


		/**
		* @brief 释放
		*
		* @return 0成功
		*/
		int32_t Finalize();

		/**
		* @brief Size 获取当前使用的大小
		*
		* @return 返回当前使用的大小
		*/
		uint32_t Size() const;


		/**
		* @brief 返回剩余大小
		*
		* @return 返回剩余大小
		*/
		uint32_t FreeSize() const;

		/**
		* @brief 重置
		*
		* @return 重置结果
		*/
		int32_t Clear();


		/**
		* @brief  写索引增加
		*
		* @param size 大小
		*/
		void AddWriteBufSize(uint32_t size);

		/**
		* @brief 读索引增加
		*
		* @param size 大小
		*/
		void AddReadBufSize(uint32_t size);

		/**
		* @brief 读地址
		*
		* @return 读地址
		*/
		uint8_t* ReadBuffer() const;

		/**
		* @brief 写地址
		*
		* @return 写地址
		*/
		uint8_t* WriteBuffer();

		/*
		* @brief 容量大小
		*/
		uint32_t capacity() const;

	private:
		uint8_t* buffer_; // 字节流指针
		uint32_t capacity_; //容量
		uint32_t read_index_;
		uint32_t write_index_;
	};

}

#endif